import java.util.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zhangshuai
 * @version V1.0
 * @Project Java2_26
 * @Package PACKAGE_NAME
 * @Description:
 * @Date 2025/5/15 14:02
 */

public class CollectionTest {
    //lists
    //Set
    //Map
    //Queue
    /*
    * /**
     * java 的集合框架。collection framework。
     * 主要学习的内容：
     * 	各种不同特点的容器。
     *
     * 数组的缺点：
     * 	1：数组定长。不能自动扩容。
     * 	2：数组的元素的类型必须是唯一的。
     * 	3：数组插入删除效率比较低。
     * 	4：没有封装。
     *
     * 大概学习三类容器：
     * 	1：序列  Sequence（lists）。元素是有序的（有序号，有下标）元素不唯一。
     * 	2：集 Set 元素的特点：无序，唯一。
     * 	3：映射  Map。元素的特点：一个元素由一对数据构成。一个称为键key，一个称为值value。(key+value-->Node)Node Map 中的元素。
     * 		例子：身份证号key，人的信息：value。
     * 		key 的特点：无序唯一。
     * 		value 特点：无序，不唯一。
     *
     *
     * 集合框架部分的内容都在 java.util 包下。
     *
     * 1：Collection：
     * 	1：是 java 集合框架部分的顶级接口。
     * 	2：Collection 容器的特点：
     * 		对实现的子类的要求：元素可以【不唯一】，可以【无序】。子类实现的时候可以添加更加严苛的功能。
     * 		Collection接口中定义的抽象方法，没有提供根据下标添加元素的方法。添加的方法没有要求，重复的内容不能添加。
     *
     * 2：java.util.Collection 有两个主要的子接口。
     * 	--- lists
     * 		在Collection的基础上，增加了根据下标处理元素的方法。元素的特点：有序（添加的顺序（添加的序号）），不唯一。
     * 	--- Set
     * 		在Collection的基础上，增加去重的要求，元素的特点：无序，唯一的。
     *
     * 3：java.util.lists
     * 	--- 接口。它有两个重要的实现的子类。
     * 		---Arraylists
     * 		---Linkedlists
     *
     */

    public static void main(String[] args) {
        //整个集合的体系结构
        //lists集合的特点：有序，不唯一。
        //主要学习两个实现类：Arraylists 和 Linkedlists。
        //Arraylists 底层是数组。
        //Linkedlists 底层是链表。
        //父类引用指向子类对象，增删查改，遍历
        List<String> lists = new ArrayList<>();
        //添加元素 add
        lists.add("张三");
        lists.add("李四");
        lists.add("张三");
        lists.add("赵六");
        lists.add(2, "赵二");
        System.out.println(lists);
        //删除元素 remove
        lists.remove("张三");
        lists.remove(0);
        System.out.println(lists);
        //修改元素 set
        lists.set(0, "赵四");
        System.out.println(lists);
        //查询元素 get
        System.out.println(lists.get(0));

        System.out.println(lists.size());//获取集合的长度  //3
        System.out.println(lists.isEmpty());//判断集合是否为空  //false
        System.out.println(lists.contains("张三"));//判断集合中是否包含指定的元素  //true
        Object[] objects = lists.toArray();
        System.out.println("***********"+Arrays.toString(objects));//将集合转换为数组  //[赵四, 赵六]
        System.out.println(lists.subList(1, 3));

//        lists.clear();//清空集合中的元素  //[]
        System.out.println(lists);

        //遍历集合
        //for-each循环遍历
        /*for (String list : lists) {
            System.out.println(list);
        }
        //fori循环遍历  //数组中，数组长度array.length 集合中，集合长度lists.size()
        for (int i = 0; i < lists.size(); i++) {
            System.out.println(lists.get(i));
        }*/
        //迭代器遍历 list.iterator()得到迭代器集合
        Iterator<String> iterator = lists.iterator();
        //迭代器集合中，有一个方法：hasNext() 判断是否有下一个元素
        while (iterator.hasNext()) {
            //迭代器集合中，有一个方法：next() 获取下一个元素
            System.out.println(iterator.next());
        }



    }
        


}